﻿using System;
using System.Collections.Generic;
using System.Text;
using MySql.Data.MySqlClient;
using equinoxWeb.Models;

namespace equinoxWeb.GestionConexion
{
    public class TareaFunction
    {
        public static Tarea abrirTarea(int idTarea, int idCaso)
        {
            Tarea tarea = new Tarea();
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("SELECT idtarea,idusuario,idestadotarea,descripcion,idCaso,DATE_FORMAT(fechacreacion,'%d/%m/%Y'),DATE_FORMAT(fechainicio,'%d/%m/%Y'),DATE_FORMAT(fechafinprogramada,'%d/%m/%Y'),DATE_FORMAT(fechafin,'%d/%m/%Y') " +
                "FROM tarea WHERE idtarea=@idTarea and idCaso=@idCaso ", con);
            cmd.Parameters.AddWithValue("@idTarea", idTarea);
            cmd.Parameters.AddWithValue("@idCaso", idCaso);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();
            if (res.Read())
            {
                tarea.IdTarea = res.GetInt32("idtarea");
                tarea.Descripcion = res.GetString("descripcion");
                idCaso = res.GetInt32("idCaso");
                tarea.IdCaso = idCaso;
                tarea.EstadoTarea = EstadoTareaFunction.abrirEstadoTarea(res.GetInt32("idestadotarea"));
                Usuario user = UsuarioFunction.abrirUsuario(res.GetInt32("idusuario"));
                tarea.IdUsuario = user.IdUsuario;
                tarea.NombreUsuario = user.Nombre + " " + user.ApellidoPat;
                tarea.FechaCreacion = res.IsDBNull(5) ? "" : res.GetString(5);
                tarea.FechaInicio = res.IsDBNull(6) ? "" : res.GetString(6);
                tarea.FechaFinProgramada = res.IsDBNull(7) ? "" : res.GetString(7);
                tarea.FechaFin = res.IsDBNull(8) ? "" : res.GetString(8);
            }
            res.Close();
            gestor.CloseConnection();
            tarea.ReferenciaCaso = CasoFunction.obtenerReferencia(idCaso);
            return tarea;
        }
        public static List<Tarea> listarTareasPendientes(int idUsuario)
        {
            List<Tarea> tareasPendientes = new List<Tarea>();
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("SELECT idtarea,idusuario,idestadotarea,descripcion,idCaso,DATE_FORMAT(fechacreacion,'%d/%m/%Y'),DATE_FORMAT(fechainicio,'%d/%m/%Y'),DATE_FORMAT(fechafinprogramada,'%d/%m/%Y'),DATE_FORMAT(fechafin,'%d/%m/%Y') " +
                "FROM tarea WHERE idusuario=@idUsuario and fechafin is null ", con);
            cmd.Parameters.AddWithValue("@idUsuario", idUsuario);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();

            while (res.Read())
            {
                Tarea tarea = new Tarea();
                tarea.IdTarea = res.GetInt32("idtarea");
                tarea.Descripcion = res.GetString("descripcion");
                int idCaso = res.GetInt32("idCaso");
                tarea.IdCaso = idCaso;
                tarea.EstadoTarea = EstadoTareaFunction.abrirEstadoTarea(res.GetInt32("idestadotarea"));
                Usuario user = UsuarioFunction.abrirUsuario(res.GetInt32("idusuario"));
                tarea.IdUsuario = user.IdUsuario;
                tarea.NombreUsuario = user.Nombre + " " + user.ApellidoPat;
                tarea.FechaCreacion = res.IsDBNull(5) ? "" : res.GetString(5);
                tarea.FechaInicio = res.IsDBNull(6) ? "" : res.GetString(6);
                tarea.FechaFinProgramada = res.IsDBNull(7) ? "" : res.GetString(7);
                tarea.FechaFin = res.IsDBNull(8) ? "" : res.GetString(8);
                tarea.ReferenciaCaso = CasoFunction.obtenerReferencia(idCaso);
                tareasPendientes.Add(tarea);

            }
            res.Close();
            gestor.CloseConnection();

            return tareasPendientes;
        }
        public static List<Tarea> listarTareasCaso(int idCaso)
        {
            List<Tarea> tareasPendientes = new List<Tarea>();
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("SELECT idtarea,idusuario,idestadotarea,descripcion,idCaso,DATE_FORMAT(fechacreacion,'%d/%m/%Y'),DATE_FORMAT(fechainicio,'%d/%m/%Y'),DATE_FORMAT(fechafinprogramada,'%d/%m/%Y'),DATE_FORMAT(fechafin,'%d/%m/%Y') " +
                "FROM tarea WHERE idCaso=@idCaso ", con);
            cmd.Parameters.AddWithValue("@idCaso", idCaso);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();
            string referenciaCaso = CasoFunction.obtenerReferencia(idCaso);
            while (res.Read())
            {
                Tarea tarea = new Tarea();
                tarea.IdTarea = res.GetInt32("idtarea");
                tarea.Descripcion = res.GetString("descripcion");
                idCaso = res.GetInt32("idCaso");
                tarea.IdCaso = idCaso;
                tarea.EstadoTarea = EstadoTareaFunction.abrirEstadoTarea(res.GetInt32("idestadotarea"));
                Usuario user = UsuarioFunction.abrirUsuario(res.GetInt32("idusuario"));
                tarea.IdUsuario = user.IdUsuario;
                tarea.NombreUsuario = user.Nombre + " " + user.ApellidoPat;
                tarea.FechaCreacion = res.IsDBNull(5) ? "" : res.GetString(5);
                tarea.FechaInicio = res.IsDBNull(6) ? "" : res.GetString(6);
                tarea.FechaFinProgramada = res.IsDBNull(7) ? "" : res.GetString(7);
                tarea.FechaFin = res.IsDBNull(8) ? "" : res.GetString(8);
                tarea.ReferenciaCaso = referenciaCaso;
                tareasPendientes.Add(tarea);
            }
            res.Close();
            gestor.CloseConnection();

            return tareasPendientes;
        }
        public static int nextIdTarea(int idCaso, MySqlConnection con)
        {
            int idTarea = 0;
            MySqlCommand cmd;
            cmd = new MySqlCommand("select count(*) from tarea where idCaso=@idCaso ", con);
            cmd.Prepare();
            cmd.Parameters.AddWithValue("@idCaso", idCaso);
            MySqlDataReader res = cmd.ExecuteReader();
            while (res.Read())
            {
                idTarea = res.GetInt32(0);
            }
            idTarea++;
            res.Close();
            return idTarea;
        }
        
        public static void agregarTarea(Tarea tarea)
        {
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            tarea.IdTarea = nextIdTarea(tarea.IdCaso, con);
            tarea.EstadoTarea = new EstadoTarea();
            tarea.EstadoTarea.IdEstadoTarea = Constantes.EstadoTareaPendiente;
            cmd = new MySqlCommand("insert into tarea (idtarea,idusuario,idestadotarea,descripcion,idCaso,fechacreacion,fechafinprogramada) values "+
                "(@idtarea,@idusuario,@idestadotarea,@descripcion,@idCaso,NOW()," +
                "STR_TO_DATE(@fechafinprogramada,'%d/%m/%Y')) ", con);
            cmd.Parameters.AddWithValue("@idTarea", tarea.IdTarea);
            cmd.Parameters.AddWithValue("@idusuario", tarea.IdUsuario);
            cmd.Parameters.AddWithValue("@idCaso", tarea.IdCaso);
            cmd.Parameters.AddWithValue("@idestadotarea", tarea.EstadoTarea.IdEstadoTarea);
            cmd.Parameters.AddWithValue("@descripcion", tarea.Descripcion);
            cmd.Parameters.AddWithValue("@fechafinprogramada", tarea.FechaFinProgramada);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
            gestor.CloseConnection();
        }
        public static void comenzarTarea(int idTarea, int idCaso)
        {
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("update tarea set fechainicio = NOW(), idestadotarea=@idestadotarea " +
                " WHERE idtarea=@idTarea and idCaso=@idCaso ", con);
            cmd.Parameters.AddWithValue("@idTarea", idTarea);
            cmd.Parameters.AddWithValue("@idCaso", idCaso);
            cmd.Parameters.AddWithValue("@idestadotarea", Constantes.EstadoTareaEnProgreso);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
            gestor.CloseConnection();
        }
        public static void finalizarTarea(int idTarea, int idCaso)
        {
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("update tarea set fechafin = NOW(), idestadotarea=@idestadotarea  " +
                " WHERE idtarea=@idTarea and idCaso=@idCaso ", con);
            cmd.Parameters.AddWithValue("@idTarea", idTarea);
            cmd.Parameters.AddWithValue("@idCaso", idCaso);
            cmd.Parameters.AddWithValue("@idestadotarea", Constantes.EstadoTareaFinalizada);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
            gestor.CloseConnection();
        }
    }
}